/********************************************************************************
* File Name:	dbookmanage.cpp
* Description:	第8章实例训练          
* Reference book:《Linux环境下Qt4图形界面与MySQL编程》，机械工业出版社.2012.1  
* E_mail: openlinux2011@gmail.com		                
*
********************************************************************************/
#include <QtGui>
#include <QSqlDatabase>
#include <QSqlQuery>
#include "dbookmanage.h"
#include "ui_dbookmanage.h"

//图书管理界面构造函数
DBookManage::DBookManage(QWidget *parent) :QDialog(parent),ui(new Ui::DBookManage)
{
    ui->setupUi(this);
    bookMangeModel=new QSqlTableModel(this);
    bookMangeModel->setTable("Book"); //绑定Book表
    bookMangeModel->setEditStrategy(QSqlTableModel::OnManualSubmit); //OnManualSubmit表明要提交修改才能生效
    bookMangeModel->select(); //执行select()函数从数据库中读取信息
    ui->BookList->setModel(bookMangeModel); //将数据库中信息显示在视图中

    ISBNBind(); //将所有图书的ISBN号与QComboBox控件绑定
}

DBookManage::~DBookManage()
{
    delete ui;
}

void DBookManage::showAll() //显示所有图书信息
{
    bookMangeModel->setFilter(QObject::tr("id like '%1'").arg("%")); //设置过滤器，显示字段id为任意值的图书信息
    bookMangeModel->select(); //执行过滤，此时视图会更新
}

void DBookManage::query() //根据条件进行查询图书信息
{
    QString select; 
    select+="1=1"; //此设置没有任何实际意义，保证过滤语句中的‘and’有效
    if( ui->cbByNm->isChecked()) //按书名查找
    {
        select+=" and Name like '"+ui->leNm->text()+"%'"; //实现按书名模糊匹配
    }
    if( ui->cbByPb->isChecked()) //按出版社查找
    {
        select+=" and Press like '"+ui->lePb->text()+"%'"; //实现按出版社模糊匹配
    }
    if( ui->cbByAuthor->isChecked()) //按作者查找
    {
        select+=" and Author like '"+ui->leAuthor->text()+"%'"; //实现按作者模糊匹配
    }
    bookMangeModel->setFilter(select); //根据select语句进行过滤器设置
    bookMangeModel->select(); //数据过滤，同时更新视图信息
}

void DBookManage::reset() //将过滤信息清空
{
    ui->leNm->setText("");
    ui->lePb->setText("");
    ui->leAuthor->setText("");
}


void DBookManage::queryByISBN() //根据图书的ISBN设置过滤器进行图书信息过滤显示
{
    bookMangeModel->setFilter(QObject::tr("ISBN = '%1'").arg(ui->cbISBNList->currentText()));
    bookMangeModel->select();
}


void DBookManage::setEnable() //槽函数，用于设置QCheckBox后对应的文本框有效
{
    if(! ui->cbByNm->isChecked())
        ui->leNm->setEnabled(FALSE);
    else
        ui->leNm->setEnabled(TRUE);
    if(! ui->cbByPb->isChecked())
        ui->lePb->setEnabled(FALSE);
    else
        ui->lePb->setEnabled(TRUE);
    if(! ui->cbByAuthor->isChecked())
        ui->leAuthor->setEnabled(FALSE);
    else
        ui->leAuthor->setEnabled(TRUE);
}

void DBookManage::ISBNBind() //将所有图书的ISBN绑定到QCheckBox
{
    ui->cbISBNList->clear();
    QSqlQuery query;
    query.exec("select ISBN from Book");
    while(query.next())
    {
        ui->cbISBNList->insertItem(0,query.value(0).toString());
    }
}
